package com.wangshili.sys.service.Impl;

import java.util.List;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wangshili.common.annotation.RequiredLog;
import com.wangshili.common.bo.PageObject;
import com.wangshili.common.exception.ServiceException;
import com.wangshili.pojo.sys.entity.SysLog;
import com.wangshili.sys.dao.SysLogDao;
import com.wangshili.sys.service.SysLogService;
/**
 * 服务层实现
 * @author wangshili 
 *
 */

@Service
public class SysLogServiceImpl implements SysLogService {
	private static final Logger log =
			LoggerFactory.getLogger(SysLogServiceImpl.class);
	
	/**
	 * 注入日志持久层接口
	 */
	@Autowired
	private SysLogDao sysLogDao;
	/**
	 * 查询统计符合该名字的行数
	 * @param name 输入用户名字，模糊查询
	 * @return
	 */
	@Override
	public int intRowCount(String name) {
		int intRowCount = sysLogDao.intRowCount(name);
		log.debug("获取"+name+"行数："+intRowCount);
		return intRowCount;
	}
	
	/**
	 * 
	 * @param username 用户名称
	 * @param pageCurren 当前页码
	 * @return
	 */
	@RequiresPermissions("sys:log:view") //必须标注在业务层
	@Override
	public PageObject<SysLog> findSysLogByUserName(String username, Integer pageCurrent) {
		log.debug("查询"+username+"用户当前"+pageCurrent+"页信息");
		//1.验证参数合法性
		if(pageCurrent == null || pageCurrent <1)//先判空再判小于，不能颠倒，不然先判小于1会出现空指针异常
			throw new IllegalArgumentException("当前页码不合法");
		//2.根据条件查询总行数
		int intRowCount = sysLogDao.intRowCount(username);
		//2.1判断查询的行数是否小于3
		if(intRowCount<1)
			throw new ServiceException("系统未找到相关信息");
		//3.查询指定用户信息
		int pageSize=10;//指定页面展现的行数
		//通过页数-1再乘页码大小得出当前页的位置，因为pageCurren起始是1，startIndex起始是0
		int startIndex = (pageCurrent-1)*pageSize;
		List<SysLog> logList = sysLogDao.findSysLogByUserName(username, startIndex, pageSize);
		//创建pageObejct对象
		PageObject<SysLog> pageObject = 
				new PageObject<SysLog>(pageCurrent,pageSize,intRowCount,logList);
		return pageObject;
	}
	
	/**
	 * 根据动态id数据删除数据
	 */
	@RequiresPermissions("sys:log:delete")
	@Override
	public int deleteById(Integer... ids) {
		log.debug("删除指定id:"+ids);
		//1.在服务端也需要做判空，如果不对直接抛异常
		if(ids==null || ids.length<1)
			throw new IllegalArgumentException("未选择需要删除的数据");
		int row;
		try {
			row = sysLogDao.deleteById(ids);
		} catch (Exception e) {
			throw new ServiceException("系统异常，删除失败");
		}
		if(row!=ids.length)
			throw new ServiceException("需要删除的部分数据不存在");
		log.debug("删除行数"+row);
		return row;
	}
	
	/**
	 * 插入一条日志信息
	 */
	@Override
	public int insertSysLog(SysLog log) {
		int rows = sysLogDao.insertSysLog(log);
		return rows;
	}



}
